#include "controller/WeaponController.hpp"
#include <wiringPi.h>

/**
 * 析构函数 - 确保对象销毁前安全关闭发射系统
 */
WeaponController::~WeaponController() {
    safeShutdown();
}

/**
 * 初始化发射系统硬件
 * @return 初始化成功返回true，失败返回false
 */
bool WeaponController::initialize() {
    if (initialized) return true;  // 避免重复初始化
    pinMode(firePin, OUTPUT);
    // 设置默认状态为安全状态（高电平 = 停止发射）
    // 低电平触发设计：默认高电平可防止意外启动
    digitalWrite(firePin, HIGH);

    initialized = true;
    return true;
}

/**
 * 启动发射系统
 * 注意：低电平触发设计 - 控制引脚输出LOW激活发射
 */
void WeaponController::startFiring() {
    if (!initialized) initialize();
    digitalWrite(firePin, LOW); // 激活发射（低电平触发）
    isFiringState = true;
}

/**
 * 停止发射系统
 * 注意：高电平触发设计 - 控制引脚输出HIGH停止发射
 */
void WeaponController::stopFiring() {
    if (!initialized) initialize();
    digitalWrite(firePin, HIGH); // 停止发射（高电平触发）
    isFiringState = false;
}

/**
 * 查询当前发射状态
 * @return 发射中返回true，待机返回false
 */
bool WeaponController::isFiring() const {
    return isFiringState;
}

/**
 * 切换发射状态
 * 发射中 → 停止发射
 * 待机 → 启动发射
 */
void WeaponController::toggleFiring() {
    isFiring() ? stopFiring() : startFiring();
}

/**
 * 安全关闭发射系统
 * - 停止发射操作
 * - 重置系统状态
 * - 释放硬件资源（标记为未初始化）
 */
void WeaponController::safeShutdown() {
    if (initialized) {
        stopFiring();
        initialized = false;
    }
}